import openai
import os
import json
from typing import List, Dict, Any, Optional
from datetime import datetime

# OpenAI配置
openai.api_key = os.getenv("OPENAI_API_KEY")

class AIService:
    """AI服务类"""
    
    def __init__(self):
        self.model = "gpt-3.5-turbo"  # 默认模型
        self.max_tokens = 2000
        self.temperature = 0.7
    
    async def chat_completion(
        self, 
        messages: List[Dict[str, str]], 
        model: str = None,
        temperature: float = None
    ) -> Optional[str]:
        """AI对话完成"""
        try:
            response = openai.ChatCompletion.create(
                model=model or self.model,
                messages=messages,
                max_tokens=self.max_tokens,
                temperature=temperature or self.temperature
            )
            return response.choices[0].message.content
        except Exception as e:
            print(f"AI对话失败: {e}")
            return None
    
    async def get_decision_advice(
        self, 
        user_question: str, 
        context_data: Dict[str, Any],
        decision_rule: str = None
    ) -> Dict[str, Any]:
        """获取决策建议"""
        
        # 构建系统提示词
        system_prompt = """你是一个专业的决策辅助AI助手。你需要基于提供的数据和上下文，为用户提供明智的决策建议。

请遵循以下原则：
1. 分析提供的数据，识别关键趋势和模式
2. 考虑多个因素和可能的后果
3. 提供具体的、可操作的建议
4. 说明建议的理由和依据
5. 如果信息不足，明确指出需要补充的信息

请用中文回答，保持专业、客观、友好的语调。"""

        # 构建用户消息
        user_message = f"""
用户问题：{user_question}

相关数据：
{json.dumps(context_data, ensure_ascii=False, indent=2)}

决策规则：
{decision_rule or "基于数据分析提供建议"}

请基于以上信息提供决策建议。
"""

        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_message}
        ]
        
        try:
            response = await self.chat_completion(messages)
            
            return {
                "success": True,
                "advice": response,
                "timestamp": datetime.now().isoformat(),
                "data_sources": list(context_data.keys())
            }
        except Exception as e:
            return {
                "success": False,
                "error": str(e),
                "timestamp": datetime.now().isoformat()
            }
    
    async def analyze_data_trends(
        self, 
        data: Dict[str, Any], 
        data_type: str
    ) -> Dict[str, Any]:
        """分析数据趋势"""
        
        system_prompt = f"""你是一个数据分析专家。请分析提供的{data_type}数据，识别关键趋势、异常值和重要信息。

请提供：
1. 数据概览和关键指标
2. 趋势分析（上升、下降、稳定）
3. 异常值或需要注意的点
4. 对决策的影响和建议"""

        user_message = f"""
数据类型：{data_type}

数据内容：
{json.dumps(data, ensure_ascii=False, indent=2)}

请进行专业的数据分析。
"""

        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_message}
        ]
        
        try:
            response = await self.chat_completion(messages)
            
            return {
                "success": True,
                "analysis": response,
                "data_type": data_type,
                "timestamp": datetime.now().isoformat()
            }
        except Exception as e:
            return {
                "success": False,
                "error": str(e),
                "timestamp": datetime.now().isoformat()
            }
    
    async def generate_dashboard_insights(
        self, 
        dashboard_data: Dict[str, Any]
    ) -> Dict[str, Any]:
        """生成仪表盘洞察"""
        
        system_prompt = """你是一个业务智能分析师。请基于仪表盘数据生成有价值的洞察和建议。

请关注：
1. 关键指标的变化趋势
2. 数据间的关联性
3. 潜在的风险和机会
4. 具体的行动建议"""

        user_message = f"""
仪表盘数据：
{json.dumps(dashboard_data, ensure_ascii=False, indent=2)}

请生成洞察报告。
"""

        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_message}
        ]
        
        try:
            response = await self.chat_completion(messages)
            
            return {
                "success": True,
                "insights": response,
                "timestamp": datetime.now().isoformat()
            }
        except Exception as e:
            return {
                "success": False,
                "error": str(e),
                "timestamp": datetime.now().isoformat()
            }

# 创建AI服务实例
ai_service = AIService()
